home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / bbs / mydoor01.zip / MYDOOR.DOC < prev    next >
Text File  |  1997-07-22  |  22KB  |  551 lines

  1.           ▀▀▀   ▀▀▀ ▀▀    ▀▀     ▀▀▀▀▀▀     ▀▀▀▀▀     ▀▀▀▀▀   ▀▀▀▀▀▀
  2.           ▀▀▀▀ ▀▀▀▀  ▀▀  ▀▀      ▀▀   ▀▀   ▀▀   ▀▀   ▀▀   ▀▀  ▀▀   ▀▀
  3.           ▀▀ ▀▀▀ ▀▀   ▀▀▀▀       ▀▀   ▀▀▀ ▀▀▀   ▀▀▀ ▀▀▀   ▀▀▀ ▀▀▀▀▀▀
  4.           ▀▀  ▀  ▀▀    ▀▀        ▀▀   ▀▀   ▀▀   ▀▀   ▀▀   ▀▀  ▀▀  ▀▀
  5.           ▀▀     ▀▀    ▀▀        ▀▀▀▀▀▀     ▀▀▀▀▀     ▀▀▀▀▀   ▀▀   ▀▀
  6.         (Also Known As "Generation III Library" Used For Carlton Doors)
  7. ═══════════════════════════════════════════════════════════════════════════════
  8.   A Utility For Creating BBS Doorgames And Online Utilities Using Qbasic 4.x
  9. ═══════════════════════════════════════════════════════════════════════════════
  10. A Personal Note:
  11.  
  12. I started writing doors in 1988 with a serial routine/library called Catpatch.
  13. From 1990 to 1995 I experimented with several door writing utilites; some
  14. worked (and were supported) better than others.
  15.  
  16. After picking up snippets of code from different public libraries, I compiled
  17. a set of instructions that seems to operate quite nicely. The variable names
  18. and subroutine names are very similar to another library you may have tried.
  19. This is not 'stolen code'. After I switched from the last library I had
  20. registered from somebody else, I had the unpleasent task of re-writing twenty
  21. doorgames of my own. To minimize the amount of re-coding, I named variables
  22. and routines very similarly to the other library.
  23.  
  24. If you're making the same switch I did, you'll see how little coding you need
  25. to do to make the transition.
  26.  
  27. The one main "feature" I have to offer, is that this is a LIVE project. I use
  28. MYDOOR almost daily for my own door writing. It's not just a project name that
  29. I have added to my list of money-makers. It's my main tool. I use it, and I
  30. support it.
  31.  
  32. There are cases when routines are important to a door's operation, but used so
  33. infrequently I hesitate to add them to the pre-compiled library (such as the
  34. hot-key input). In such cases, I provide the routine for you to add to the
  35. main body of the code. These little tricks are great for keeping the size of
  36. the final door down when compiled.
  37.  
  38. The chat function has been removed from this library. It is now used solely in
  39. my CHAT WINDOW door, and has been removed so that I don't have to worry about
  40. competing with myself. <g>
  41. ═══════════════════════════════════════════════════════════════════════════════
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.                                 PAGE - 1 -
  51. LEGAL/TECHNICAL:
  52.  
  53. THIS DOCUMENT ASSUMES THAT YOU HAVE MICROSOFT(C) QUICKBASIC(C) V4.x INSTALLED
  54. INTO C:\QBASIC. IF YOU HAVE IT INSTALLED ANYWHERE ELSE, YOU MUST BE SMART
  55. ENOUGH TO SUBSTITUTE YOUR DIRECTORY NAME WHEN USING MY EXAMPLES.
  56.  
  57. MYDOOR WILL NOT WORK PROPERLY WITH MICROSOFT(C) QBASIC(C) WHICH WAS INCLUDED
  58. WITH SEVERAL VERSIONS OF MICROSOFT(C) DOS(C). ALL PRODUCTS REFERRED TO IN THIS
  59. DOCUMENT ARE COPYRIGHTED BY THEIR RESPECTFUL OWNER, REGARDLESS OF WHETHER THEY
  60. ARE MARKED WITH (C) OR NOT.
  61. ═══════════════════════════════════════════════════════════════════════════════
  62.  
  63. PREPARING QBASIC TO CALL THE LIBRARY:
  64.  
  65. Edit your autoexec.bat and add the past to qbasic. This saves you from having
  66. to program in your C:\QBASIC directory. Reboot your machine once after the
  67. change is made. (BTW: In this document, I try not to assume anything, so bare
  68. with me if I seem a bit dull at times...)
  69.  
  70. Copy all of the MYDOOR.* files into your C:\QBASIC directory.
  71.  
  72. Make a directory under your C:\QBASIC directory to program in. We'll call
  73. ours: C:\QBASIC\SAMPLE in this document.
  74.  
  75. Go to your C:\QBASIC directory, and type: QB
  76.  
  77. Use ALT/O (Options Menu), select Paths, and point the Library and Include
  78. Files path to your C:\QBASIC directory. OK your selections and exit QBASIC.
  79. ═══════════════════════════════════════════════════════════════════════════════
  80.  
  81. CALLING THE LIBRARY:
  82.  
  83. To start QBASIC with the library loaded, type: QB /LMYDOOR
  84. The /L tell QBASIC that MYDOOR is an external library.
  85.  
  86. The very first line of every program you ever write with mydoor will be:
  87. '$INCLUDE: 'C:\QBASIC\MYDOOR.BI'
  88.  
  89. The next three lines should be:
  90. version = "(Put Door Name And Version Number Here)"
  91. author$ = "(Your Name)"
  92. mydoor$ = "unregistered"
  93.  
  94. example:
  95. version = "DoorMania II v1.00"
  96. author$ = "Todd Carlton"
  97. mydoor$ = "unregistered"
  98.  
  99.  
  100.                                 Page - 2 -
  101. CALLING THE LIBRARY (cont.)
  102.  
  103. version: Appears centered at the bottom of the screen locally while the door
  104.          is running.
  105. author$: Your name. The mydoor registration code is linked to this name.
  106. mydoor$: Put your mydoor registration number in here once you've registered
  107.          the library to get rid the mydoor unregistered screen. Entering
  108.          anything other than "unregistered" or a valid registration code
  109.          will cause the door to not run.
  110. ═══════════════════════════════════════════════════════════════════════════════
  111.  
  112. LOADING THE BBS DROPFILE:
  113.  
  114. It's important for you to know how MAKENODE.EXE works. It creates a table of
  115. values used by all MYDOOR and CARLTON BBS Doors.
  116.  
  117. The path to MYDOOR.INF (the node information table) must be stored in the
  118. variable: nodepath$ which is deciphered by the routine read.cnf.
  119.  
  120. I get all my information up front by reading a door configuration file.
  121. One of my typical configuration files is read like this:
  122.  
  123. OPEN "BBSDOOR.CFG" FOR INPUT SHARED AS #1
  124. LINE INPUT #1, SysName
  125. LINE INPUT #1, BoardNam
  126. LINE INPUT #1, Nodepath$
  127. LINE INPUT #1, AscScore$
  128. LINE INPUT #1, AnsScore$
  129. LINE INPUT #1, Reg$
  130. CLOSE #1
  131.  
  132. Notice that the file is opened for SHARED access. This is important when
  133. writing doors to be run on multi-node BBSes.
  134.  
  135. Line 1: 'sysname' is the MYDOOR variable that stores the name of the Sysop
  136.         who is running the door.
  137. Line 2: 'boardnam' is the MYDOOR variable that stores the name of the BBS
  138.         that the door is being run on.
  139. Line 3: 'nodepath$' is the MYDOOR variable that stores the path to the node
  140.         information table.
  141. Line 4: 'ascscore$' is a variable I chose to write an ascii score file to.
  142. Line 5: 'ansscore$' is a variable I chose to write an ansi/color score file to.
  143. Line 6: 'reg$' is a variable I chose to hold the door's registration code.
  144.         MYDOOR does not automatically create a registration code for your
  145.         doors. For the registration to CARLTON doors I use parts of the sysname
  146.         and boardnam variables, and perform mathematics on their ascii codes.
  147.  
  148. SPECIAL NOTE: usernam is the variable that holds the caller's name.
  149. ═══════════════════════════════════════════════════════════════════════════════
  150.                                 Page - 3-
  151. THE SAMPLE DOOR SO FAR:
  152.  
  153. '$INCLUDE: 'C:\QBASIC\MYDOOR.BI'
  154.  
  155. version = "Test Door v1.00"
  156. author$ = "Todd Carlton"
  157. mydoor$ = "unregistered"
  158.  
  159. OPEN "BBSDOOR.CFG" FOR INPUT SHARED AS #1
  160. LINE INPUT #1, SysNam
  161. LINE INPUT #1, BoardNam
  162. LINE INPUT #1, Nodepath$
  163. LINE INPUT #1, AscScore$
  164. LINE INPUT #1, AnsScore$
  165. LINE INPUT #1, Reg$
  166. CLOSE #1
  167.  
  168. read.cnf Nodepath$
  169. ═══════════════════════════════════════════════════════════════════════════════
  170.  
  171. MYDOOR COMMANDS:
  172.  
  173. COMMAND (VARIABLES)
  174. DESCRIPTION
  175. EXAMPLE
  176.  
  177. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  178.  
  179. at (ypos%, xpos%)
  180.  
  181. Places the cursor at a screen position; ypos% down from top, xpos% from the
  182. left edge of the screen. ypos% represents rows, xpos% represents columns.
  183. (SPECIAL NOTE: Don't get hung-up on the variable names. In mathematical terms
  184. the X-Coordinate is the vertical element.)
  185.  
  186. EXAMPLE: at 10, 40
  187.  
  188. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  189.  
  190. at.say (row%, col%, mes$)
  191.  
  192. Prints the information stored in mes$ at the specified row (vertical) and
  193. column (horizontal). at.say DOES NOT send a carriage return or line feed
  194. after it's display, so the cursor is left the the end of your display instead
  195. of moving down the first position of the next line.
  196.  
  197. EXAMPLE: at.say 10, 70, "Score: " + score$
  198.  
  199.  
  200.                                 Page - 4 -
  201. MYDOOR COMMANDS (cont):
  202.  
  203. box.it (x%, y%, fgc%, bgc%, high, wide)
  204.  
  205. Prints a two-color box x% rows from the top, y% columns from the left, with
  206. a color of fgc%, "shading" color of bgc%. The high and wide variables DO NOT
  207. include the corners. (A box 1 high by one wide will actually occupy 3x3
  208. positions with corners.)
  209.  
  210. EXAMPLE: box.it 5, 10, 11, 9, 3, 8
  211.  
  212. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  213.  
  214. chime
  215.  
  216. Makes the standard PC "Ding" one time, both locally and on the remote end.
  217.  
  218. EXAMPLE: chime
  219.  
  220. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  221.  
  222. clear.scr
  223.  
  224. Clears the screen. SPECIAL NOTE: clear.scr DOES NOT change colors before
  225. clearing the screen, so if the last color you set was white on a blue back-
  226. ground, clear.scr will clear to a new screen with a blue background.  Also
  227. some people use black-on-black with in.put (below) to fool callers into think-
  228. ing they're in a hot-keyed menu. I typically set the correct color immediately
  229. before clearing the screen. It's a good habit.
  230.  
  231. EXAMPLE: clear.scr
  232.  
  233. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  234.  
  235. colr (fg%, bg%, blink%)
  236.  
  237. Sets the current color using standard ANSI color codes. fg% is the foreground
  238. color, bg% is the background color and blink% is either a 1 (on) or 0 (off).
  239. SPECIAL NOTE: If you activate blink%, all new output will blink until you turn
  240. it off again.
  241.  
  242. EXAMPLE: colr 15, 0, 0
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.                                 Page - 5-
  251. MYDOOR COMMANDS (cont.):
  252.  
  253. fiex(filename$)
  254.  
  255. Checks to see if a file exists. If the file exists, fiex(filename$) = -1. If
  256. the file does not exist fiex(filename$) = 0.
  257.  
  258. EXAMPLE: IF fiex("scores.dat") = 0 THEN GOSUB CREATESCORE: ELSE GOTO READSCORE
  259.  
  260. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  261.  
  262. in.put (wide%, hot%, ifg%, ibg%, blink%, msg$, tfg%, tbg%, row%, col%, hide%)
  263.  
  264. Gets input from caller. Input is limited to the number of characters specified
  265. in wide%. hot% is either 0 or 1. if hot% is 1 the routine will process (without
  266. pressing ENTER) as soon as they have entered the number of characters soecified
  267. in wide%. If wide%=1 and hot% = 1 then after the caller presses 1 key, the
  268. routine will continue. If wide% = 1 and hot% = 0 the caller must press 1 key,
  269. plus the ENTER key. ifg% sets the input foreground color, ibg% sets the input
  270. background color. blink% determines whether the output from msg$ blinks (0 or
  271. 1 again). msg$ is the question you're asking for input, or it may be a null ""
  272. if you want nothing displayed before the input. tfg% is the forground color for
  273. msg$, tbg% is the background color for msg$. row% and col% are the screen
  274. positions you want the msg$ to begin displaying at. hide% determines whether
  275. you want the caller to see what they're typing OR IF IT SHOULD BE REPLACED WITH
  276. BLOCKS. If you don't want the caller to see anything about what they're typing,
  277. you need to set ifg% and bgc% to the current background color.
  278.  
  279. The caller's input as they entered it is stored in response$. The caller's
  280. input in all upper case letters is stored in arg$.
  281.  
  282. SPECIAL NOTE: Not even *I* remember all the parameters on this beast! If you
  283. have the library properly loaded, you can type "in.put" on a line, put your
  284. cursor on the "i" and press [F1] and the parameters will pop up in a window.
  285.  
  286. EXAMPLE: in.put 2, 0, 15, 1, 0, "Your Bet (1-10):", 14, 0, 22, 35, 0
  287.  
  288. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  289.  
  290. leave (n%)
  291.  
  292. This MUST be the last command executed in your door. leave puts the fossil
  293. back to original condition, closes up MYDOOR data channels and leaves the
  294. system nice and clean for the BBS to resume operation. Newer BBSes expect
  295. doors to have poor communication maintenance, so neglecting to use leave will
  296. not hurt them. Forgetting to use leave may lock up older BBSes. the variable
  297. n% is either 1 (display closing message) or 0 (exit without closing message).
  298.  
  299. EXAMPLE: leave 0
  300.                                 Page - 6 -
  301. MYDOOR COMMANDS (cont.):
  302.  
  303. nl (n%)
  304.  
  305. nl (null line) simply sends the number of carriage returns stored in n%.
  306.  
  307. EXAMPLE: nl 3
  308.  
  309. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  310.  
  311. pause (row%)
  312.  
  313. Puts the prompt "Press Any Key To Continue..." at whatever row is specified
  314. for row%.
  315.  
  316. EXAMPLE: pause 23
  317.  
  318. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  319.  
  320. read.cnf (nodepath$)
  321.  
  322. Reads in the node communication parameters from MYDOOR.INF, which is created
  323. by MAKENODE.EXE. It's use is further documented above in "THE SAMPLE DOOR
  324. SO FAR:" section.
  325.  
  326. EXAMPLE: read.cnf nodepath$
  327.  
  328. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  329.  
  330. rip.check
  331.  
  332. This routine was written to check a callers terminal for compatibility with
  333. RipScrip(C) 1.5x from Telegrafix(C). If the caller's terminal supports the
  334. RipScrip(C) 1.5x standard, then rip%=1. If not, rip% = 0. (SPECIAL NOTE:
  335. I personally gave up on Rip after 1.54 and do not offer any Rip routines in
  336. this library, other than to check for 1.5x's existance. I have no idea how
  337. v2.x works, and have no interest in further supporting Telegrafix(C)'s
  338. product.)
  339.  
  340. EXAMPLE: rip.check
  341.  
  342. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  343.  
  344. set.status
  345.  
  346. Toggles status bars at the bottom of the screen while the door is running.
  347.  
  348. EXAMPLE: set.status 1
  349.  
  350.                                 PAGE - 7 -
  351. MYDOOR COMMANDS (cont.):
  352.  
  353. show.mess (mes$, carriage%)
  354.  
  355. Displays output stored in mes$ at the current cursor location. If carriage%=1
  356. a carriage return is sent. If carriage%=0, the cursor is left at the end of
  357. the output displayed.
  358.  
  359. EXAMPLE: show.mess "New Score: ",0: GOSUB scorecalc: show.mess STR$(score),1
  360.  
  361. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  362.  
  363. trim (st$)
  364.  
  365. I found myself doing a LTRIM$(RTRIM$()) frequently to make sure I got rid
  366. of leading and trailing spaces, so trim was invented. Trim removes leading
  367. and trailing spaces.
  368.  
  369. EXAMPLE: A$ = trim(A$)
  370.  
  371. ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
  372.  
  373. waitasec (sec%)
  374.  
  375. Pauses the program for the number of seconds specified in sec%.
  376.  
  377. EXAMPLE: waitasec 4
  378. ═══════════════════════════════════════════════════════════════════════════════
  379.  
  380. MYDOOR HOT KEYED INPUT:
  381.  
  382. Action Doorgames always fascinated me. My problem to solve was to give a
  383. caller only so long to press keys, then have the door do something, whether
  384. they responded or not, then go back to the caller for another chance to
  385. interact.
  386.  
  387. If you have no idea what I'm talking about, think of TETRIS(C). You can rotate
  388. the blocks, you can force them to fall faster, or you can move them from side
  389. to side. But even if you do nothing, they continue to fall down the screen.
  390.  
  391. If you look through all the MYDOOR files in this archive, you'll see that the
  392. routines (above) are an end-set for your use. There are close to a hundred
  393. sub-sets of routines to make the doors work. User time must be tracked,
  394. carrier has to be tested for. Fossils initialized and deinitialized, etc.
  395.  
  396. So it's with these sub-level routines I developed a hot-key scenario!
  397.  
  398.  
  399.  
  400.                                 Page - 8 -
  401. MYDOOR HOT KEYED INPUT (cont.):
  402.  
  403. The only way I can really explain this is with commented example, so read
  404. closely!
  405.  
  406. SAMPLE CODE:
  407.  
  408. PLAYERMOVE:
  409. check = TIMER: REM COMMENT LINE 1
  410. drop = .75: REM COMMENT LINE 2
  411. DO
  412. time.dozeoff = time.remaining: REM COMMENT LINE 3
  413. arg$ = INKEY$: REM COMMENT LINE 4
  414. IF DataWaiting THEN arg$ = UCASE$(CHR$(ReadChar)): REM COMMENT LINE 5
  415. IF arg$ = "1" THEN
  416.         REM BLAH BLAH BLAH
  417. END IF
  418. IF arg$ = "A" THEN
  419.         REM BLAH BLAH BLAH BLAH
  420. END IF
  421. IF arg$ = "?" THEN
  422.         REM BLAH BLAH BLAH BLAH BLAH
  423. END IF
  424. IF arg$ = "Q" THEN quit = 1
  425. LOOP UNTIL (TIMER > check + drop) or (TIMER < 1): REM COMMENT LINE 6
  426. IF quit = 1 THEN GOTO OVER
  427. REM DOOR MAKES IT'S MOVES, THEN RETURNS TO PLAYERMOVE:
  428.  
  429. Line 1: The only part of every PC I could find that runs "the same" from an
  430. XT to a Pentium 166 was the timer. By using the timer, the door will run at
  431. the same speed, regardless of what kind of PC the BBS runs on!
  432.  
  433. Line 2: (This sample is from my TRIS door.) I used a variable called drop to
  434. adjust how long a player has inside this routine. In the real game, I deduct
  435. .10 from the drop variable every 5 completed lines, giving the player less time
  436. to respond before the door went on without them.
  437.  
  438. Line 3: Because we're down in the "low-level" code, I don't get the benefits
  439. of checking carrier, etc. Typically time.dozeoff kicks the caller out of the
  440. door for inactivity. Since we KNOW they're active (for at least 3/4 of a
  441. second) we make sure the door doesn't timeout on the caller.
  442.  
  443. Line 4: We get input from the local keyboard, so people can play locally;
  444. or mess with the caller's game as the case may be... ;)
  445.  
  446. Line 5: If there's a carrier, we read the incoming characters next, giving
  447. it "last say" or "higher priority" to override a local keypress, thus
  448. stopping interference from mischevious local watchers.
  449.  
  450.                                 Page - 9 -
  451. MYDOOR HOT KEYED INPUT (cont.):
  452.  
  453. The argument block activates subroutines for the door to perform whatever
  454. function is actiavted by the keypress. Note: These MUST BE SUBROUTINES so
  455. the command structure resturns to our timed block. When the door finally
  456. ends, it must be from the doormoves area, not the playermove.
  457.  
  458. Line 6: Once the player/caller has had their time to respond, the door gets
  459. to make it's moves. The reason we check for TIMER < 1 is because if a player
  460. plays past midnight (where TIMER = 000000), the game would go into an endless
  461. loop. When programming, you must consider ALL possibilities.
  462. ═══════════════════════════════════════════════════════════════════════════════
  463. DISPLAYING FILES:
  464.  
  465. I removed two routines from MYDOOR. One showed ANSI files, the other multi-
  466. page ASCII. Here is the code, in case you ever need it:
  467.  
  468. Displaying One-Screen Files:
  469. Colr 15, 0, 0: Clear.Scr
  470. OPEN "DISPLAY.ANS" FOR INPUT SHARED AS #35
  471. DO: LINE INPUT #35, line$: SHOW.MESS line$, 1
  472. LOOP UNTIL EOF(35): CLOSE #35: PAUSE 23
  473.  
  474. Displaying Multi-Screen Files:
  475. Colr 15, 0, 0: Clear.Scr
  476. OPEN "BOOK.ASC" FOR INPUT SHARED AS #35
  477. lin = 0
  478. DO: LINE INPUT #35, line$: SHOW.MESS line$, 1: lin = lin + 1
  479. IF lin = 22 THEN PAUSE 23: Colr 15, 0, 0: Clear.scr: lin = 0
  480. LOOP UNTIL EOF(35): CLOSE #35: PAUSE 23
  481. ═══════════════════════════════════════════════════════════════════════════════
  482.  
  483. RUNNING MYDOOR DOORS:
  484.  
  485. MYDOOR Doors all use the same installation procedure.
  486.  
  487. Run the MAKENODE.EXE utility to create the file MYDOOR.INF
  488.  
  489. Once MAKENODE.EXE is run one time to create node definitions, it won't ever
  490. need to run it again unless a node is changed or added. The MYDOOR.INF is
  491. good for EVERY door written with the MYDOOR library.
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.                                 Page - 10 -
  500. MAKENODE.EXE: Explained
  501.  
  502. The COMMON DIRECTORY is a directory that ALL nodes have access to. Typically
  503. this would be the main directory where the BBS Program resides.
  504.  
  505. Answer questions A-F for each of the nodes. For the more technical questions
  506. (like the base addresses for your port) infomational windows appear at the
  507. bottom of the screen, providing "standard" choices. If the SYSOP has specially
  508. configured ports or non-standard IRQ's, change the values to the correct infor-
  509. mation. If a SYSOP can successfully run a non-standard port, MYDOORS will
  510. operate on them.
  511.  
  512. If the SYSOP runs a "local only" node, set it up as if it's a standard node on
  513. COM1:. The SYSOP must answer every question for each node.
  514.  
  515. The command line to run a door is DOORNAME # (# is the number of the node
  516. accessing the file). If your door is named: BESTDOOR.EXE then the command to
  517. run it on node 2 is: BESTDOOR 2
  518.  
  519. To run a door in local mode (without starting the BBS) you can either just
  520. use the doorname, or you can use a zero for the node number.
  521. ═══════════════════════════════════════════════════════════════════════════════
  522.  
  523. CALLING FOR HELP:
  524.  
  525. I support the MYDOOR library, I don't support your doors or your code.
  526. If you have any questions about the MYDOOR library, it's operation, any
  527. bugs (which I haven't found any in over two years...) or suggestions for
  528. more routines I can be reached:
  529.  
  530. U.S. Postal:            E-Mail: todd@pca.net
  531. Todd Carlton            FidoNet: 1:130/319
  532. 2009A Oakwood Ct        Echo: FidoNet DOORGAMES
  533. Arlington, TX 76012     BBS: 1-817-794-0126
  534. ═══════════════════════════════════════════════════════════════════════════════
  535.  
  536. LAST WORDS:
  537.  
  538. I am working on a "demo door" to show off all the features of the MYDOOR
  539. library. Until it's done, I'm easiest contacted by E-Mail which I check
  540. several times a day. Instead of constantly updating the library (which is
  541. right now 100% stable) I am planning on putting up a web-site with requested
  542. routines you can cut-and-paste into your doors as you need them.
  543.  
  544. If you come up with an awsome routine that is worth modifying the library,
  545. I certainly will, but one feature of the library is it's compact size.
  546.  
  547. In the next release, some lesser-used routines (like box.it) may be moved
  548. from the library to a cut-and-paste routine.
  549.  
  550.                                 Page - 11 -
  551.